// 该文件用于处理 ResizeObserver 循环错误警告
// 1. 替换 console.error 方法，忽略特定的 ResizeObserver 错误信息
// 2. 添加全局错误事件处理，阻止 ResizeObserver 错误事件冒泡

(() => {
  // 只在浏览器环境中执行
  if (typeof window !== 'undefined') {
    // 方法1: 替换 console.error 方法
    const originalError = window.console.error;
    window.console.error = (...args) => {
      // 不显示 ResizeObserver 循环错误
      if (args[0] && typeof args[0] === 'string' && args[0].includes('ResizeObserver loop')) {
        return;
      }
      originalError.apply(window.console, args);
    };

    // 方法2: 添加全局错误事件监听，阻止错误事件冒泡
    const observerErrRegExp = /(ResizeObserver loop completed with undelivered notifications|ResizeObserver loop limit exceeded)/;
    
    window.addEventListener('error', (event) => {
      if (event && event.message && observerErrRegExp.test(event.message)) {
        event.stopImmediatePropagation();
        event.preventDefault();
        return true;
      }
    }, true);

    // 方法3: 为 ResizeObserver 添加更安全的全局 Loop Detection 防护
    // 这种方法会在所有 ResizeObserver 实例创建时应用
    if (window.ResizeObserver && !window.__RESIZE_OBSERVER_PATCHED__) {
      const originalResizeObserver = window.ResizeObserver;
      
      window.ResizeObserver = class SafeResizeObserver extends originalResizeObserver {
        constructor(callback) {
          // 包装回调函数，使用 requestAnimationFrame 延迟执行
          const safeCallback = (entries, observer) => {
            window.requestAnimationFrame(() => {
              if (Array.isArray(entries) && entries.length > 0) {
                callback(entries, observer);
              }
            });
          };
          
          super(safeCallback);
        }
      };
      
      window.__RESIZE_OBSERVER_PATCHED__ = true;
    }
  }
})(); 